package com.cyl.game.demos.web.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;

import com.cyl.game.demos.web.entity.Hero;
import com.cyl.game.demos.web.entity.User;

@Mapper
public interface UserMapper {
    // 插入用户信息
    @Insert("INSERT INTO users (username, password) VALUES (#{username}, #{password})")
    int insertUser(User user);

    // 根据用户名查询用户信息（可用于登录验证等场景）
    @Select("SELECT * FROM users WHERE username = #{username}")
    User selectUserByUsername(String username);

    // 查询所有用户信息（可根据实际需求扩展更多查询方法）
    @Select("SELECT * FROM users")
    List<User> selectAllUsers();
        // 获取指定用户所拥有的英雄 ID 列表
    @Select("SELECT hero_id FROM hero_designs WHERE user_id = #{user_id}")
    List<Integer> selectHeroIdsByUserId(Integer user_id);

    // 获取所有用户及其所拥有的英雄 ID 列表（以 Map 形式返回，方便后续处理，键为用户 ID，值为英雄 ID 列表）
    @Select("SELECT u.user_id, GROUP_CONCAT(hd.hero_id) AS hero_ids " +
            "FROM users u " +
            "JOIN hero_designs hd ON u.user_id = hd.user_id " +
            "GROUP BY u.user_id")
    List<Map<String, Object>> selectAllUsersWithHeroIds();
        // 获取指定用户所拥有的所有英雄设计信息（通过中间关联表查询）
    @Select("SELECT hd.* " +
            "FROM users u " +
            "JOIN user_hero_relation uhr ON u.user_id = uhr.user_id " +
            "JOIN hero_designs hd ON uhr.hero_id = hd.hero_id " +
            "WHERE u.user_id = #{user_id}")
    List<Hero> selectAllHeroesOwnedByUserId(Integer user_id);

    // 获取拥有指定英雄的所有用户信息（通过中间关联表查询）
    @Select("SELECT u.* " +
            "FROM users u " +
            "JOIN user_hero_relation uhr ON u.user_id = uhr.user_id " +
            "JOIN hero_designs hd ON uhr.hero_id = hd.hero_id " +
            "WHERE hd.hero_id = #{hero_id}")
    List<User> selectAllUsersWhoOwnHero(Integer hero_id);
}